--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / networkVisualiserWebGL.js
Displaying Raw • Download
meshchatx/src/frontend/js/networkVisualiserWebGL.js e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 28.65 KB
T8b949e/**
* WebGL2 canvas renderer for MeshChatX network visualiser.
* Draws instanced circular sprites (textured when available) and line edges.
*/
T8b949e/** WASM / scene pack: x y size r g b a kind */
Tff7b72export Tff7b72const Te6edf3SCENE_NODE_STRIDE Tff7b72= T79c0ff8Tb4b4b4;
T8b949e/** Draw instance: x y size r g b a useTex u v */
Tff7b72export Tff7b72const Te6edf3NODE_STRIDE Tff7b72= T79c0ff10Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3EDGE_STRIDE Tff7b72= T79c0ff8Tb4b4b4;
Tff7b72const Te6edf3ATLAS_CELL Tff7b72= T79c0ff128Tb4b4b4;
Tff7b72const Te6edf3ATLAS_COLS Tff7b72= T79c0ff16Tb4b4b4;
Tff7b72const Te6edf3ATLAS_ROWS Tff7b72= T79c0ff16Tb4b4b4;
Tff7b72const Te6edf3ATLAS_CAPACITY Tff7b72= Te6edf3ATLAS_COLS Tff7b72* Te6edf3ATLAS_ROWSTb4b4b4;
T8b949e/** Soft-edge AA width in UV radius units (1.0 = disc edge). Keep tight to avoid fuzzy blobs. */
Tff7b72export Tff7b72const Te6edf3NODE_EDGE_INNER Tff7b72= T79c0ff0.97Tb4b4b4;
T8b949e/** Border ring starts inside the disc (untextured and under glyphs). */
Tff7b72export Tff7b72const Te6edf3NODE_BORDER_INNER Tff7b72= T79c0ff0.82Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3NODE_BORDER_OUTER Tff7b72= T79c0ff0.97Tb4b4b4;
Tff7b72const Te6edf3NODE_VS Tff7b72= Ta5d6ff`Ta5d6ff#version 300 es
layout(location=0) in vec2 a_corner;
layout(location=1) in vec2 a_center;
layout(location=2) in float a_size;
layout(location=3) in vec4 a_color;
layout(location=4) in float a_useTex;
layout(location=5) in vec2 a_uvOrigin;
uniform vec2 u_resolution;
uniform vec2 u_camera;
uniform float u_zoom;
out vec4 v_color;
out vec2 v_uv;
out float v_useTex;
out vec2 v_uvOrigin;
void main() {
v_uv = a_corner;
v_color = a_color;
v_useTex = a_useTex;
v_uvOrigin = a_uvOrigin;
float r = max(a_size, 2.0);
vec2 world = a_center + a_corner * r;
vec2 screen = (world - u_camera) * u_zoom + u_resolution * 0.5;
vec2 clip = (screen / u_resolution) * 2.0 - 1.0;
clip.y = -clip.y;
gl_Position = vec4(clip, 0.0, 1.0);
}
Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3NODE_FS Tff7b72= Ta5d6ff`Ta5d6ff#version 300 es
precision mediump float;
in vec4 v_color;
in vec2 v_uv;
in float v_useTex;
in vec2 v_uvOrigin;
uniform sampler2D u_atlas;
uniform vec2 u_cellUv;
out vec4 outColor;
void main() {
float d = length(v_uv);
if (d > 1.0) discard;
// Tight AA so nodes read as crisp discs, not soft fuzzy blobs.
float edge = smoothstep(1.0, Tffd700${Te6edf3NODE_EDGE_INNERTb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff2Tb4b4b4)Tffd700}Ta5d6ff, d);
float border = smoothstep(Tffd700${Te6edf3NODE_BORDER_INNERTb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff2Tb4b4b4)Tffd700}Ta5d6ff, Tffd700${Te6edf3NODE_BORDER_OUTERTb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff2Tb4b4b4)Tffd700}Ta5d6ff, d);
vec3 fill = v_color.rgb;
vec3 rim = fill * 0.55;
if (v_useTex > 0.5) {
vec2 local = v_uv * 0.5 + 0.5;
vec2 texUV = v_uvOrigin + local * u_cellUv;
vec4 tex = texture(u_atlas, texUV);
float texA = clamp(tex.a, 0.0, 1.0);
// Colored disc from node color, optional glyph/logo from atlas on top.
vec3 rgb = mix(fill, tex.rgb, texA);
rgb = mix(rgb, rim, border * (1.0 - texA));
float a = edge * v_color.a;
if (a < 0.02) discard;
outColor = vec4(rgb, a);
} else {
vec3 rgb = mix(fill, rim, border);
outColor = vec4(rgb, v_color.a * edge);
}
}
Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3EDGE_VS Tff7b72= Ta5d6ff`Ta5d6ff#version 300 es
layout(location=0) in vec2 a_pos;
layout(location=1) in vec4 a_color;
uniform vec2 u_resolution;
uniform vec2 u_camera;
uniform float u_zoom;
out vec4 v_color;
void main() {
v_color = a_color;
vec2 screen = (a_pos - u_camera) * u_zoom + u_resolution * 0.5;
vec2 clip = (screen / u_resolution) * 2.0 - 1.0;
clip.y = -clip.y;
gl_Position = vec4(clip, 0.0, 1.0);
}
Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3EDGE_FS Tff7b72= Ta5d6ff`Ta5d6ff#version 300 es
precision mediump float;
in vec4 v_color;
out vec4 outColor;
void main() {
outColor = v_color;
}
Ta5d6ff`Tb4b4b4;
Tff7b72function Te6edf3compileTb4b4b4(Te6edf3glTb4b4b4, Te6edf3typeTb4b4b4, Te6edf3srcTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3sh Tff7b72= Te6edf3glTb4b4b4.Te6edf3createShaderTb4b4b4(Te6edf3typeTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3shaderSourceTb4b4b4(Te6edf3shTb4b4b4, Te6edf3srcTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3compileShaderTb4b4b4(Te6edf3shTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3glTb4b4b4.Te6edf3getShaderParameterTb4b4b4(Te6edf3shTb4b4b4, Te6edf3glTb4b4b4.Te6edf3COMPILE_STATUSTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3info Tff7b72= Te6edf3glTb4b4b4.Te6edf3getShaderInfoLogTb4b4b4(Te6edf3shTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteShaderTb4b4b4(Te6edf3shTb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffWebGL shader: Tffd700${Te6edf3infoTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3shTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3linkTb4b4b4(Te6edf3glTb4b4b4, Te6edf3vsSrcTb4b4b4, Te6edf3fsSrcTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3vs Tff7b72= Te6edf3compileTb4b4b4(Te6edf3glTb4b4b4, Te6edf3glTb4b4b4.Te6edf3VERTEX_SHADERTb4b4b4, Te6edf3vsSrcTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3fs Tff7b72= Te6edf3compileTb4b4b4(Te6edf3glTb4b4b4, Te6edf3glTb4b4b4.Te6edf3FRAGMENT_SHADERTb4b4b4, Te6edf3fsSrcTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3prog Tff7b72= Te6edf3glTb4b4b4.Te6edf3createProgramTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3attachShaderTb4b4b4(Te6edf3progTb4b4b4, Te6edf3vsTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3attachShaderTb4b4b4(Te6edf3progTb4b4b4, Te6edf3fsTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3linkProgramTb4b4b4(Te6edf3progTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteShaderTb4b4b4(Te6edf3vsTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteShaderTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3glTb4b4b4.Te6edf3getProgramParameterTb4b4b4(Te6edf3progTb4b4b4, Te6edf3glTb4b4b4.Te6edf3LINK_STATUSTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3info Tff7b72= Te6edf3glTb4b4b4.Te6edf3getProgramInfoLogTb4b4b4(Te6edf3progTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteProgramTb4b4b4(Te6edf3progTb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffWebGL program: Tffd700${Te6edf3infoTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3progTb4b4b4;
Tb4b4b4}
T8b949e/**
* Merge WASM scene node packs with atlas UVs into draw instances.
* @param {Float32Array|null} sceneNodes SCENE_NODE_STRIDE
* @param {{useTex:number,u:number,v:number}[]} texMeta per-node
* @param {Float32Array} [dst] scratch with length >= count * NODE_STRIDE
* @returns {Float32Array} view of length count * NODE_STRIDE
*/
Tff7b72export Tff7b72function Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Te6edf3sceneNodesTb4b4b4, Te6edf3texMetaTb4b4b4, Te6edf3dstTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3count Tff7b72= Te6edf3sceneNodes Tff7b72&& Te6edf3sceneNodesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3sceneNodesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3SCENE_NODE_STRIDETb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3need Tff7b72= Te6edf3count Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3dst Tff7b72&& Te6edf3dstTb4b4b4.Te6edf3length Tff7b72>= Te6edf3need Tff7b72? Te6edf3dst Tff7b72: Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3needTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3countTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Te6edf3i Tff7b72* Te6edf3SCENE_NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3d Tff7b72= Te6edf3i Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Te6edf3outTb4b4b4[Te6edf3dTb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3s Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3s Tff7b72+ T79c0ff2Tb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3s Tff7b72+ T79c0ff3Tb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff4Tb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3s Tff7b72+ T79c0ff4Tb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff5Tb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3s Tff7b72+ T79c0ff5Tb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff6Tb4b4b4] Tff7b72= Te6edf3sceneNodesTb4b4b4[Te6edf3s Tff7b72+ T79c0ff6Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3meta Tff7b72= Te6edf3texMetaTff7b72?Tb4b4b4.Tb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff7Tb4b4b4] Tff7b72= Te6edf3metaTff7b72?Tb4b4b4.Te6edf3useTex Tff7b72? T79c0ff1 Tff7b72: T79c0ff0Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff8Tb4b4b4] Tff7b72= Te6edf3metaTff7b72?Tb4b4b4.Te6edf3u Tff7b72?? T79c0ff0Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3d Tff7b72+ T79c0ff9Tb4b4b4] Tff7b72= Te6edf3metaTff7b72?Tb4b4b4.Te6edf3v Tff7b72?? T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3need Tff7b72=== Te6edf3outTb4b4b4.Te6edf3length Tff7b72? Te6edf3out Tff7b72: Te6edf3outTb4b4b4.Te6edf3subarrayTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3needTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Atlas UV origin for a slot index.
* @param {number} slot
* @returns {{u:number,v:number}}
*/
Tff7b72export Tff7b72function Te6edf3atlasUvForSlotTb4b4b4(Te6edf3slotTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3col Tff7b72= Te6edf3slot Tff7b72% Te6edf3ATLAS_COLSTb4b4b4;
Tff7b72const Te6edf3row Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3slot Tff7b72/ Te6edf3ATLAS_COLSTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3uTff7b72: Te6edf3col Tff7b72/ Te6edf3ATLAS_COLSTb4b4b4,
Te6edf3vTff7b72: Te6edf3row Tff7b72/ Te6edf3ATLAS_ROWSTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {HTMLCanvasElement} canvas
* @returns {WebGL2RenderingContext|null}
*/
Tff7b72export Tff7b72function Te6edf3tryCreateWebGL2ContextTb4b4b4(Te6edf3canvasTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3canvas Tff7b72|| Tff7b72typeof Te6edf3canvasTb4b4b4.Te6edf3getContext Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72return Te6edf3canvasTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"webgl2"Tb4b4b4, Tb4b4b4{
Te6edf3alphaTff7b72: Tff7b72falseTb4b4b4,
Te6edf3antialiasTff7b72: Tff7b72trueTb4b4b4,
Te6edf3depthTff7b72: Tff7b72falseTb4b4b4,
Te6edf3stencilTff7b72: Tff7b72falseTb4b4b4,
Te6edf3powerPreferenceTff7b72: Ta5d6ff"high-performance"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* @param {WebGL2RenderingContext} gl
*/
T8b949e/**
* Resolve a same-origin asset path against the Vite/app base URL.
* Absolute http(s)/blob/data URLs are returned unchanged.
* @param {string} url
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3resolveVisualiserAssetUrlTb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3url Tff7b72|| Tff7b72typeof Te6edf3url Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tff7b72return Ta5d6ff""Tb4b4b4;
Tff7b72const Te6edf3trimmed Tff7b72= Te6edf3urlTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3trimmedTb4b4b4) Tff7b72return Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff/^(?:blob:|data:|https?:|file:)/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3trimmedTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3trimmedTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72!== Ta5d6ff"undefined" Tff7b72&& Tffa657windowTb4b4b4.Te6edf3locationTff7b72?Tb4b4b4.Te6edf3origin Tff7b72&& Te6edf3trimmedTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3base Tff7b72= Tff7b72typeof Tff7b72importTb4b4b4.Te6edf3meta Tff7b72!== Ta5d6ff"undefined" Tff7b72&& Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3envTff7b72?Tb4b4b4.Te6edf3BASE_URL Tff7b72? Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3envTb4b4b4.Te6edf3BASE_URL Tff7b72: Ta5d6ff"/"Tb4b4b4;
Tff7b72const Te6edf3root Tff7b72= Tffa657StringTb4b4b4(Te6edf3base Tff7b72|| Ta5d6ff"/"Tb4b4b4)Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\/?$/Tb4b4b4, Ta5d6ff"/"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3root Tff7b72!== Ta5d6ff"/" Tff7b72&& Tff7b72!Te6edf3trimmedTb4b4b4.Te6edf3startsWithTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff`Tffd700${Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3originTffd700}Tffd700${Te6edf3rootTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\/$/Tb4b4b4, Ta5d6ff""Tb4b4b4)Tffd700}Tffd700${Te6edf3trimmedTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff`Tffd700${Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3originTffd700}Tffd700${Te6edf3trimmedTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3trimmedTb4b4b4;
Tb4b4b4}
T8b949e/**
* True when the asset is a solid-fill network-visualiser badge (colored disc + light glyph).
* Those should be converted to white-on-transparent glyphs so the shader can paint node color.
* @param {string} url
*/
Tff7b72export Tff7b72function Te6edf3isGlyphStyleVisualiserIconTb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3url Tff7b72|| Tff7b72typeof Te6edf3url Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72return Ta5d6ff/\/network-visualiser\//iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Prepare atlas RGBA pixels for upload.
*
* - opaque: keep soft alpha (logo AA). Only promote RGB-with-a=0 PNG quirks.
* - glyph: keep bright glyph coverage as soft alpha (preserves AA), clear fill
*
* @param {Uint8ClampedArray|Uint8Array} data RGBA buffer (mutated)
* @param {"opaque"|"glyph"} mode
* @returns {{painted:number,glyphPixels:number}}
*/
Tff7b72export Tff7b72function Te6edf3prepareVisualiserIconPixelsTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3mode Tff7b72= Ta5d6ff"opaque"Tb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3painted Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3glyphPixels Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3data Tff7b72|| Te6edf3dataTb4b4b4.Te6edf3length Tff7b72< T79c0ff4Tb4b4b4) Tff7b72return Tb4b4b4{ Te6edf3paintedTff7b72: T79c0ff0Tb4b4b4, Te6edf3glyphPixelsTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3glyphMode Tff7b72= Te6edf3mode Tff7b72=== Ta5d6ff"glyph"Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3dataTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff4Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3r Tff7b72= Te6edf3dataTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3g Tff7b72= Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3b Tff7b72= Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff2Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff3Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3r Tff7b72| Te6edf3g Tff7b72| Te6edf3b Tff7b72| Te6edf3aTb4b4b4)Tb4b4b4) Tff7b72continueTb4b4b4;
Te6edf3painted Tff7b72+= T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3glyphModeTb4b4b4) Tb4b4b4{
T8b949e// Soft coverage from luma so badge AA edges stay smooth when scaled.
Tff7b72const Te6edf3luma Tff7b72= T79c0ff0.299 Tff7b72* Te6edf3r Tff7b72+ T79c0ff0.587 Tff7b72* Te6edf3g Tff7b72+ T79c0ff0.114 Tff7b72* Te6edf3bTb4b4b4;
Tff7b72const Te6edf3maxc Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3rTb4b4b4, Te6edf3gTb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3minc Tff7b72= Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Te6edf3rTb4b4b4, Te6edf3gTb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sat Tff7b72= Te6edf3maxc Tff7b72- Te6edf3mincTb4b4b4;
Tff7b72let Te6edf3cover Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3luma Tff7b72>= T79c0ff210Tb4b4b4) Tb4b4b4{
Te6edf3cover Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3luma Tff7b72>= T79c0ff150Tb4b4b4) Tb4b4b4{
Te6edf3cover Tff7b72= Tb4b4b4(Te6edf3luma Tff7b72- T79c0ff150Tb4b4b4) Tff7b72/ T79c0ff60Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3sat Tff7b72> T79c0ff50Tb4b4b4) Tb4b4b4{
Te6edf3cover Tff7b72*= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff1 Tff7b72- Tb4b4b4(Te6edf3sat Tff7b72- T79c0ff50Tb4b4b4) Tff7b72/ T79c0ff120Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3luma Tff7b72>= T79c0ff130 Tff7b72&& Te6edf3sat Tff7b72< T79c0ff35Tb4b4b4) Tb4b4b4{
Te6edf3cover Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3luma Tff7b72- T79c0ff130Tb4b4b4) Tff7b72/ T79c0ff20Tb4b4b4) Tff7b72* T79c0ff0.45Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3cover Tff7b72<= T79c0ff0.02Tb4b4b4) Tb4b4b4{
Te6edf3dataTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72const Te6edf3alpha Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3coverTb4b4b4) Tff7b72* T79c0ff255Tb4b4b4)Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= T79c0ff255Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= T79c0ff255Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= T79c0ff255Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= Te6edf3alphaTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3alpha Tff7b72>= T79c0ff24Tb4b4b4) Te6edf3glyphPixels Tff7b72+= T79c0ff1Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3a Tff7b72=== T79c0ff0 Tff7b72&& Tb4b4b4(Te6edf3r Tff7b72!== T79c0ff0 Tff7b72|| Te6edf3g Tff7b72!== T79c0ff0 Tff7b72|| Te6edf3b Tff7b72!== T79c0ff0Tb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// Some RGB PNGs store color with a=0. Promote those only.
T8b949e// Never crush existing soft alpha (RNS logo fringe looked jagged).
Te6edf3dataTb4b4b4[Te6edf3i Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= T79c0ff255Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3paintedTb4b4b4, Te6edf3glyphPixels Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Downscale large bitmaps in steps before the final atlas blit.
* A single 512→116 drawImage looks soft/jagged on HiDPI discs.
* @param {CanvasRenderingContext2D} ctx
* @param {CanvasImageSource} source
* @param {number} sw
* @param {number} sh
* @param {number} dx
* @param {number} dy
* @param {number} dw
* @param {number} dh
*/
Tff7b72export Tff7b72function Te6edf3drawImageToAtlasCellTb4b4b4(Te6edf3ctxTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3swTb4b4b4, Te6edf3shTb4b4b4, Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4, Te6edf3dwTb4b4b4, Te6edf3dhTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3ctx Tff7b72|| Tff7b72!Te6edf3source Tff7b72|| Tff7b72!Tb4b4b4(Te6edf3dw Tff7b72> T79c0ff0 Tff7b72&& Te6edf3dh Tff7b72> T79c0ff0 Tff7b72&& Te6edf3sw Tff7b72> T79c0ff0 Tff7b72&& Te6edf3sh Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3ctxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff"imageSmoothingQuality" Tff7b72in Te6edf3ctxTb4b4b4) Tb4b4b4{
Te6edf3ctxTb4b4b4.Te6edf3imageSmoothingQuality Tff7b72= Ta5d6ff"high"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657document Tff7b72=== Ta5d6ff"undefined" Tff7b72|| Tb4b4b4(Te6edf3sw Tff7b72<= Te6edf3dw Tff7b72* T79c0ff2 Tff7b72&& Te6edf3sh Tff7b72<= Te6edf3dh Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ctxTb4b4b4.Te6edf3drawImageTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4, Te6edf3dwTb4b4b4, Te6edf3dhTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3curW Tff7b72= Te6edf3swTb4b4b4;
Tff7b72let Te6edf3curH Tff7b72= Te6edf3shTb4b4b4;
Tff7b72let Te6edf3cur Tff7b72= Te6edf3sourceTb4b4b4;
Tff7b72const Te6edf3temps Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72while Tb4b4b4(Te6edf3curW Tff7b72> Te6edf3dw Tff7b72* T79c0ff2 Tff7b72|| Te6edf3curH Tff7b72> Te6edf3dh Tff7b72* T79c0ff2Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3nextW Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3dwTb4b4b4, Tffa657MathTb4b4b4.Te6edf3ceilTb4b4b4(Te6edf3curW Tff7b72/ T79c0ff2Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nextH Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3dhTb4b4b4, Tffa657MathTb4b4b4.Te6edf3ceilTb4b4b4(Te6edf3curH Tff7b72/ T79c0ff2Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3tmp Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Te6edf3tmpTb4b4b4.Te6edf3width Tff7b72= Te6edf3nextWTb4b4b4;
Te6edf3tmpTb4b4b4.Te6edf3height Tff7b72= Te6edf3nextHTb4b4b4;
Tff7b72const Te6edf3tctx Tff7b72= Te6edf3tmpTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4, Tb4b4b4{ Te6edf3alphaTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3tctxTb4b4b4) Tff7b72breakTb4b4b4;
Te6edf3tctxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff"imageSmoothingQuality" Tff7b72in Te6edf3tctxTb4b4b4) Tb4b4b4{
Te6edf3tctxTb4b4b4.Te6edf3imageSmoothingQuality Tff7b72= Ta5d6ff"high"Tb4b4b4;
Tb4b4b4}
Te6edf3tctxTb4b4b4.Te6edf3drawImageTb4b4b4(Te6edf3curTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3nextWTb4b4b4, Te6edf3nextHTb4b4b4)Tb4b4b4;
Te6edf3tempsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3tmpTb4b4b4)Tb4b4b4;
Te6edf3cur Tff7b72= Te6edf3tmpTb4b4b4;
Te6edf3curW Tff7b72= Te6edf3nextWTb4b4b4;
Te6edf3curH Tff7b72= Te6edf3nextHTb4b4b4;
Tb4b4b4}
Te6edf3ctxTb4b4b4.Te6edf3drawImageTb4b4b4(Te6edf3curTb4b4b4, Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4, Te6edf3dwTb4b4b4, Te6edf3dhTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
T8b949e// Drop temp canvases promptly (no explicit dispose API).
Te6edf3tempsTb4b4b4.Te6edf3length Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3createIconAtlasTb4b4b4(Te6edf3glTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3width Tff7b72= Te6edf3ATLAS_COLS Tff7b72* Te6edf3ATLAS_CELLTb4b4b4;
Tff7b72const Te6edf3height Tff7b72= Te6edf3ATLAS_ROWS Tff7b72* Te6edf3ATLAS_CELLTb4b4b4;
Tff7b72const Te6edf3texture Tff7b72= Te6edf3glTb4b4b4.Te6edf3createTextureTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindTextureTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3textureTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texParameteriTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3glTb4b4b4.Te6edf3TEXTURE_MIN_FILTERTb4b4b4, Te6edf3glTb4b4b4.Te6edf3LINEAR_MIPMAP_LINEARTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texParameteriTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3glTb4b4b4.Te6edf3TEXTURE_MAG_FILTERTb4b4b4, Te6edf3glTb4b4b4.Te6edf3LINEARTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texParameteriTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3glTb4b4b4.Te6edf3TEXTURE_WRAP_STb4b4b4, Te6edf3glTb4b4b4.Te6edf3CLAMP_TO_EDGETb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texParameteriTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3glTb4b4b4.Te6edf3TEXTURE_WRAP_TTb4b4b4, Te6edf3glTb4b4b4.Te6edf3CLAMP_TO_EDGETb4b4b4)Tb4b4b4;
T8b949e// Cap mip depth so neighbouring atlas cells do not bleed into logos.
Te6edf3glTb4b4b4.Te6edf3texParameteriTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3glTb4b4b4.Te6edf3TEXTURE_BASE_LEVELTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texParameteriTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3glTb4b4b4.Te6edf3TEXTURE_MAX_LEVELTb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texImage2DTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3RGBATb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3RGBATb4b4b4, Te6edf3glTb4b4b4.Te6edf3UNSIGNED_BYTETb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3generateMipmapTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3urlToSlot Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pending Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3freeSlots Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72let Te6edf3nextSlot Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3scratch Tff7b72= Tff7b72typeof Tffa657document Tff7b72!== Ta5d6ff"undefined" Tff7b72? Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3scratchTb4b4b4) Tb4b4b4{
Te6edf3scratchTb4b4b4.Te6edf3width Tff7b72= Te6edf3ATLAS_CELLTb4b4b4;
Te6edf3scratchTb4b4b4.Te6edf3height Tff7b72= Te6edf3ATLAS_CELLTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3scratchCtx Tff7b72= Te6edf3scratchTff7b72?Tb4b4b4.Te6edf3getContextTff7b72?Tb4b4b4.Tb4b4b4(Ta5d6ff"2d"Tb4b4b4, Tb4b4b4{ Te6edf3willReadFrequentlyTff7b72: Tff7b72trueTb4b4b4, Te6edf3alphaTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4) Tff7b72|| Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3scratchCtxTb4b4b4) Tb4b4b4{
Te6edf3scratchCtxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff"imageSmoothingQuality" Tff7b72in Te6edf3scratchCtxTb4b4b4) Tb4b4b4{
Te6edf3scratchCtxTb4b4b4.Te6edf3imageSmoothingQuality Tff7b72= Ta5d6ff"high"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3allocSlotTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3freeSlotsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tff7b72return Te6edf3freeSlotsTb4b4b4.Te6edf3popTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3nextSlot Tff7b72>= Te6edf3ATLAS_CAPACITYTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Te6edf3nextSlotTff7b72++Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3paintSlotTb4b4b4(Te6edf3slotTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3scratchCtx Tff7b72|| Tff7b72!Te6edf3scratchTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Te6edf3scratchCtxTb4b4b4.Te6edf3saveTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3scratchCtxTb4b4b4.Te6edf3setTransformTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3scratchCtxTb4b4b4.Te6edf3globalCompositeOperation Tff7b72= Ta5d6ff"source-over"Tb4b4b4;
Te6edf3scratchCtxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff"imageSmoothingQuality" Tff7b72in Te6edf3scratchCtxTb4b4b4) Tb4b4b4{
Te6edf3scratchCtxTb4b4b4.Te6edf3imageSmoothingQuality Tff7b72= Ta5d6ff"high"Tb4b4b4;
Tb4b4b4}
Te6edf3scratchCtxTb4b4b4.Te6edf3clearRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3ATLAS_CELLTb4b4b4, Te6edf3ATLAS_CELLTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sw Tff7b72= Te6edf3sourceTb4b4b4.Te6edf3width Tff7b72|| Te6edf3sourceTb4b4b4.Te6edf3videoWidth Tff7b72|| Te6edf3ATLAS_CELLTb4b4b4;
Tff7b72const Te6edf3sh Tff7b72= Te6edf3sourceTb4b4b4.Te6edf3height Tff7b72|| Te6edf3sourceTb4b4b4.Te6edf3videoHeight Tff7b72|| Te6edf3ATLAS_CELLTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3sw Tff7b72> T79c0ff0 Tff7b72&& Te6edf3sh Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3scratchCtxTb4b4b4.Te6edf3restoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
T8b949e// Pad so circular clip and mip filtering do not chew logo AA.
Tff7b72const Te6edf3pad Tff7b72= Te6edf3isGlyphStyleVisualiserIconTb4b4b4(Te6edf3urlTb4b4b4) Tff7b72? T79c0ff2 Tff7b72: T79c0ff6Tb4b4b4;
Tff7b72const Te6edf3fit Tff7b72= Te6edf3ATLAS_CELL Tff7b72- Te6edf3pad Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72const Te6edf3scale Tff7b72= Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Te6edf3fit Tff7b72/ Te6edf3swTb4b4b4, Te6edf3fit Tff7b72/ Te6edf3shTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dw Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3sw Tff7b72* Te6edf3scaleTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dh Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3sh Tff7b72* Te6edf3scaleTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dx Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3ATLAS_CELL Tff7b72- Te6edf3dwTb4b4b4) Tff7b72/ T79c0ff2Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dy Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3ATLAS_CELL Tff7b72- Te6edf3dhTb4b4b4) Tff7b72/ T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3drawImageToAtlasCellTb4b4b4(Te6edf3scratchCtxTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3swTb4b4b4, Te6edf3shTb4b4b4, Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4, Te6edf3dwTb4b4b4, Te6edf3dhTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pixels Tff7b72= Te6edf3scratchCtxTb4b4b4.Te6edf3getImageDataTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3ATLAS_CELLTb4b4b4, Te6edf3ATLAS_CELLTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3data Tff7b72= Te6edf3pixelsTb4b4b4.Te6edf3dataTb4b4b4;
Tff7b72const Te6edf3mode Tff7b72= Te6edf3isGlyphStyleVisualiserIconTb4b4b4(Te6edf3urlTb4b4b4) Tff7b72? Ta5d6ff"glyph" Tff7b72: Ta5d6ff"opaque"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3mode Tff7b72=== Ta5d6ff"glyph"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3backup Tff7b72= Tff7b72new Tffa657Uint8ClampedArrayTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72const Tb4b4b4{ Te6edf3paintedTb4b4b4, Te6edf3glyphPixels Tb4b4b4} Tff7b72= Te6edf3prepareVisualiserIconPixelsTb4b4b4(Te6edf3dataTb4b4b4, Ta5d6ff"glyph"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3painted Tff7b72< T79c0ff8Tb4b4b4) Tb4b4b4{
Te6edf3scratchCtxTb4b4b4.Te6edf3restoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3glyphPixels Tff7b72< T79c0ff8Tb4b4b4) Tb4b4b4{
Te6edf3dataTb4b4b4.Te6edf3setTb4b4b4(Te6edf3backupTb4b4b4)Tb4b4b4;
Te6edf3prepareVisualiserIconPixelsTb4b4b4(Te6edf3dataTb4b4b4, Ta5d6ff"opaque"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3painted Tb4b4b4} Tff7b72= Te6edf3prepareVisualiserIconPixelsTb4b4b4(Te6edf3dataTb4b4b4, Ta5d6ff"opaque"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3painted Tff7b72< T79c0ff8Tb4b4b4) Tb4b4b4{
Te6edf3scratchCtxTb4b4b4.Te6edf3restoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3scratchCtxTb4b4b4.Te6edf3putImageDataTb4b4b4(Te6edf3pixelsTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3scratchCtxTb4b4b4.Te6edf3restoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3col Tff7b72= Te6edf3slot Tff7b72% Te6edf3ATLAS_COLSTb4b4b4;
Tff7b72const Te6edf3row Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3slot Tff7b72/ Te6edf3ATLAS_COLSTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindTextureTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3textureTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3pixelStoreiTb4b4b4(Te6edf3glTb4b4b4.Te6edf3UNPACK_FLIP_Y_WEBGLTb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3pixelStoreiTb4b4b4(Te6edf3glTb4b4b4.Te6edf3UNPACK_PREMULTIPLY_ALPHA_WEBGLTb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3texSubImage2DTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3col Tff7b72* Te6edf3ATLAS_CELLTb4b4b4, Te6edf3row Tff7b72* Te6edf3ATLAS_CELLTb4b4b4, Te6edf3glTb4b4b4.Te6edf3RGBATb4b4b4, Te6edf3glTb4b4b4.Te6edf3UNSIGNED_BYTETb4b4b4, Te6edf3scratchTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3generateMipmapTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3loadImageSourceTb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3resolved Tff7b72= Te6edf3resolveVisualiserAssetUrlTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3createImageBitmap Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3resolvedTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6fficon fetch Tffd700${Te6edf3resTb4b4b4.Te6edf3statusTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3blob Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3blobTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72await Te6edf3createImageBitmapTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// Fall through to HTMLImageElement.
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3img Tff7b72= Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3el Tff7b72= Tff7b72new Te6edf3ImageTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3elTb4b4b4.Te6edf3decoding Tff7b72= Ta5d6ff"sync"Tb4b4b4;
Te6edf3elTb4b4b4.Te6edf3onload Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3resolveTb4b4b4(Te6edf3elTb4b4b4)Tb4b4b4;
Te6edf3elTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6fficon load failed: Tffd700${Te6edf3resolvedTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3elTb4b4b4.Te6edf3src Tff7b72= Te6edf3resolvedTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3imgTb4b4b4.Te6edf3decode Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3imgTb4b4b4.Te6edf3decodeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// decode() can reject for already-decoded bitmaps
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3imgTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} url
* @returns {Promise<number|null>} slot index or null
*/
Tff7b72async Tff7b72function Te6edf3ensureTb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3url Tff7b72|| Tff7b72typeof Te6edf3url Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlToSlotTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3urlToSlotTb4b4b4.Te6edf3getTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pendingTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3pendingTb4b4b4.Te6edf3getTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3slot Tff7b72= Te6edf3allocSlotTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3slot Tff7b72== Tff7b72nullTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3work Tff7b72= Te6edf3loadImageSourceTb4b4b4(Te6edf3urlTb4b4b4)
Tb4b4b4.Te6edf3thenTb4b4b4(Tb4b4b4(Te6edf3imgTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3ok Tff7b72= Te6edf3paintSlotTb4b4b4(Te6edf3slotTb4b4b4, Te6edf3imgTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3imgTb4b4b4.Te6edf3close Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3imgTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e/* ignore */
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3okTb4b4b4) Tb4b4b4{
Te6edf3freeSlotsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3slotTb4b4b4)Tb4b4b4;
Te6edf3pendingTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3urlToSlotTb4b4b4.Te6edf3setTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3slotTb4b4b4)Tb4b4b4;
Te6edf3pendingTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3slotTb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3pendingTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Te6edf3freeSlotsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3slotTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3pendingTb4b4b4.Te6edf3setTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3workTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3workTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3destroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3glTb4b4b4.Te6edf3deleteTextureTb4b4b4(Te6edf3textureTb4b4b4)Tb4b4b4;
Te6edf3urlToSlotTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pendingTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3textureTb4b4b4,
Te6edf3ensureTb4b4b4,
Te6edf3uvForSlotTff7b72: Te6edf3atlasUvForSlotTb4b4b4,
Te6edf3cellUvTff7b72: Tb4b4b4{ Te6edf3xTff7b72: T79c0ff1 Tff7b72/ Te6edf3ATLAS_COLSTb4b4b4, Te6edf3yTff7b72: T79c0ff1 Tff7b72/ Te6edf3ATLAS_ROWS Tb4b4b4}Tb4b4b4,
Te6edf3destroyTb4b4b4,
Te6edf3getSlotTff7b72: Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Te6edf3urlToSlotTb4b4b4.Te6edf3getTb4b4b4(Te6edf3urlTb4b4b4) Tff7b72?? Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {HTMLCanvasElement} canvas
* @param {WebGL2RenderingContext} gl
*/
Tff7b72export Tff7b72function Te6edf3createNetworkVisualiserWebGLTb4b4b4(Te6edf3canvasTb4b4b4, Te6edf3glTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3nodeProg Tff7b72= Te6edf3linkTb4b4b4(Te6edf3glTb4b4b4, Te6edf3NODE_VSTb4b4b4, Te6edf3NODE_FSTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3edgeProg Tff7b72= Te6edf3linkTb4b4b4(Te6edf3glTb4b4b4, Te6edf3EDGE_VSTb4b4b4, Te6edf3EDGE_FSTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3atlas Tff7b72= Te6edf3createIconAtlasTb4b4b4(Te6edf3glTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nodeCornerBuf Tff7b72= Te6edf3glTb4b4b4.Te6edf3createBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindBufferTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3nodeCornerBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bufferDataTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Tff7b72new Tffa657Float32ArrayTb4b4b4(Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3STATIC_DRAWTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nodeInstanceBuf Tff7b72= Te6edf3glTb4b4b4.Te6edf3createBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3edgeBuf Tff7b72= Te6edf3glTb4b4b4.Te6edf3createBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nodeVao Tff7b72= Te6edf3glTb4b4b4.Te6edf3createVertexArrayTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Te6edf3nodeVaoTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindBufferTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3nodeCornerBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff2Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindBufferTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3nodeInstanceBufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3strideBytes Tff7b72= Te6edf3NODE_STRIDE Tff7b72* T79c0ff4Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, Te6edf3strideBytesTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribDivisorTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, Te6edf3strideBytesTb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribDivisorTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff3Tb4b4b4, T79c0ff4Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, Te6edf3strideBytesTb4b4b4, T79c0ff12Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribDivisorTb4b4b4(T79c0ff3Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff4Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff4Tb4b4b4, T79c0ff1Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, Te6edf3strideBytesTb4b4b4, T79c0ff28Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribDivisorTb4b4b4(T79c0ff4Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff5Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff5Tb4b4b4, T79c0ff2Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, Te6edf3strideBytesTb4b4b4, T79c0ff32Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribDivisorTb4b4b4(T79c0ff5Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3edgeVao Tff7b72= Te6edf3glTb4b4b4.Te6edf3createVertexArrayTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Te6edf3edgeVaoTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindBufferTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3edgeBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff2Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, T79c0ff6 Tff7b72* T79c0ff4Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableVertexAttribArrayTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3vertexAttribPointerTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff4Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3FLOATTb4b4b4, Tff7b72falseTb4b4b4, T79c0ff6 Tff7b72* T79c0ff4Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uNodeRes Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3nodeProgTb4b4b4, Ta5d6ff"u_resolution"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uNodeCam Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3nodeProgTb4b4b4, Ta5d6ff"u_camera"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uNodeZoom Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3nodeProgTb4b4b4, Ta5d6ff"u_zoom"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uNodeAtlas Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3nodeProgTb4b4b4, Ta5d6ff"u_atlas"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uNodeCellUv Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3nodeProgTb4b4b4, Ta5d6ff"u_cellUv"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uEdgeRes Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3edgeProgTb4b4b4, Ta5d6ff"u_resolution"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uEdgeCam Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3edgeProgTb4b4b4, Ta5d6ff"u_camera"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uEdgeZoom Tff7b72= Te6edf3glTb4b4b4.Te6edf3getUniformLocationTb4b4b4(Te6edf3edgeProgTb4b4b4, Ta5d6ff"u_zoom"Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3cssW Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72let Te6edf3cssH Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72let Te6edf3nodeCount Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3edgeVertexCount Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3edgeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
T8b949e/** @type {HTMLCanvasElement|null} */
Tff7b72let Te6edf3labelCanvas Tff7b72= Tff7b72nullTb4b4b4;
T8b949e/** @type {CanvasRenderingContext2D|null} */
Tff7b72let Te6edf3labelCtx Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657document Tff7b72!== Ta5d6ff"undefined" Tff7b72&& Te6edf3canvasTff7b72?Tb4b4b4.Te6edf3parentElementTb4b4b4) Tb4b4b4{
Te6edf3labelCanvas Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Te6edf3labelCanvasTb4b4b4.Te6edf3className Tff7b72= Ta5d6ff"network-webgl-labels"Tb4b4b4;
Te6edf3labelCanvasTb4b4b4.Te6edf3styleTb4b4b4.Te6edf3cssText Tff7b72= Ta5d6ff"position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;"Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3parentElementTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3labelCanvasTb4b4b4)Tb4b4b4;
Te6edf3labelCtx Tff7b72= Te6edf3labelCanvasTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4, Tb4b4b4{ Te6edf3alphaTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3labelCtxTb4b4b4) Tb4b4b4{
Te6edf3labelCtxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff"imageSmoothingQuality" Tff7b72in Te6edf3labelCtxTb4b4b4) Tb4b4b4{
Te6edf3labelCtxTb4b4b4.Te6edf3imageSmoothingQuality Tff7b72= Ta5d6ff"high"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3resizeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3dpr Tff7b72= Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Tffa657windowTb4b4b4.Te6edf3devicePixelRatio Tff7b72|| T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rect Tff7b72= Te6edf3canvasTb4b4b4.Te6edf3getBoundingClientRectTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3cssW Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3rectTb4b4b4.Te6edf3width Tff7b72|| Te6edf3canvasTb4b4b4.Te6edf3clientWidth Tff7b72|| T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3cssH Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3rectTb4b4b4.Te6edf3height Tff7b72|| Te6edf3canvasTb4b4b4.Te6edf3clientHeight Tff7b72|| T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bw Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3cssW Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bh Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3cssH Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3width Tff7b72!== Te6edf3bw Tff7b72|| Te6edf3canvasTb4b4b4.Te6edf3height Tff7b72!== Te6edf3bhTb4b4b4) Tb4b4b4{
Te6edf3canvasTb4b4b4.Te6edf3width Tff7b72= Te6edf3bwTb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3height Tff7b72= Te6edf3bhTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3labelCanvas Tff7b72&& Tb4b4b4(Te6edf3labelCanvasTb4b4b4.Te6edf3width Tff7b72!== Te6edf3bw Tff7b72|| Te6edf3labelCanvasTb4b4b4.Te6edf3height Tff7b72!== Te6edf3bhTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3labelCanvasTb4b4b4.Te6edf3width Tff7b72= Te6edf3bwTb4b4b4;
Te6edf3labelCanvasTb4b4b4.Te6edf3height Tff7b72= Te6edf3bhTb4b4b4;
Tb4b4b4}
Te6edf3glTb4b4b4.Te6edf3viewportTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3canvasTb4b4b4.Te6edf3widthTb4b4b4, Te6edf3canvasTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3widthTff7b72: Te6edf3cssWTb4b4b4, Te6edf3heightTff7b72: Te6edf3cssH Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {Float32Array} nodes packed NODE_STRIDE
* @param {Float32Array} edges packed EDGE_STRIDE
* @param {{x:number,y:number,zoom:number}} camera
* @param {boolean} dark
* @param {{x:number,y:number,size:number,text:string,fontSize?:number}[]} [labels]
*/
Tff7b72function Te6edf3drawTb4b4b4(Te6edf3nodesTb4b4b4, Te6edf3edgesTb4b4b4, Te6edf3cameraTb4b4b4, Te6edf3darkTb4b4b4, Te6edf3labelsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3size Tff7b72= Te6edf3resizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3camX Tff7b72= Te6edf3cameraTff7b72?Tb4b4b4.Te6edf3x Tff7b72?? T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3camY Tff7b72= Te6edf3cameraTff7b72?Tb4b4b4.Te6edf3y Tff7b72?? T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3zoom Tff7b72= Te6edf3cameraTff7b72?Tb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3cameraTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3dpr Tff7b72= Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Tffa657windowTb4b4b4.Te6edf3devicePixelRatio Tff7b72|| T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3darkTb4b4b4) Tb4b4b4{
Te6edf3glTb4b4b4.Te6edf3clearColorTb4b4b4(T79c0ff0.035Tb4b4b4, T79c0ff0.035Tb4b4b4, T79c0ff0.04Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3glTb4b4b4.Te6edf3clearColorTb4b4b4(T79c0ff0.973Tb4b4b4, T79c0ff0.98Tb4b4b4, T79c0ff0.988Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3glTb4b4b4.Te6edf3clearTb4b4b4(Te6edf3glTb4b4b4.Te6edf3COLOR_BUFFER_BITTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3enableTb4b4b4(Te6edf3glTb4b4b4.Te6edf3BLENDTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3blendFuncTb4b4b4(Te6edf3glTb4b4b4.Te6edf3SRC_ALPHATb4b4b4, Te6edf3glTb4b4b4.Te6edf3ONE_MINUS_SRC_ALPHATb4b4b4)Tb4b4b4;
Te6edf3nodeCount Tff7b72= Te6edf3nodes Tff7b72&& Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3NODE_STRIDETb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3edgeCount Tff7b72= Te6edf3edges Tff7b72&& Te6edf3edgesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3edgesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3EDGE_STRIDETb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3need Tff7b72= Te6edf3edgeCount Tff7b72* T79c0ff12Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3edgeScratchTb4b4b4.Te6edf3length Tff7b72< Te6edf3needTb4b4b4) Tb4b4b4{
Te6edf3edgeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3needTb4b4b4, T79c0ff64Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3edgeCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3EDGE_STRIDETb4b4b4;
Tff7b72const Te6edf3d Tff7b72= Te6edf3i Tff7b72* T79c0ff12Tb4b4b4;
Tff7b72const Te6edf3x1 Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3oTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3y1 Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3x2 Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff2Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3y2 Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff3Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff4Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3g Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff5Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3b Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff6Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Te6edf3edgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff7Tb4b4b4]Tb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3dTb4b4b4] Tff7b72= Te6edf3x1Tb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3y1Tb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= Te6edf3rTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= Te6edf3gTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff4Tb4b4b4] Tff7b72= Te6edf3bTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff5Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff6Tb4b4b4] Tff7b72= Te6edf3x2Tb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff7Tb4b4b4] Tff7b72= Te6edf3y2Tb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff8Tb4b4b4] Tff7b72= Te6edf3rTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff9Tb4b4b4] Tff7b72= Te6edf3gTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff10Tb4b4b4] Tff7b72= Te6edf3bTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff11Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4;
Tb4b4b4}
Te6edf3edgeVertexCount Tff7b72= Te6edf3edgeCount Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3edgeVertexCount Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3glTb4b4b4.Te6edf3useProgramTb4b4b4(Te6edf3edgeProgTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform2fTb4b4b4(Te6edf3uEdgeResTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3widthTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform2fTb4b4b4(Te6edf3uEdgeCamTb4b4b4, Te6edf3camXTb4b4b4, Te6edf3camYTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform1fTb4b4b4(Te6edf3uEdgeZoomTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Te6edf3edgeVaoTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindBufferTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3edgeBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bufferDataTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3edgeScratchTb4b4b4.Te6edf3subarrayTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3needTb4b4b4)Tb4b4b4, Te6edf3glTb4b4b4.Te6edf3DYNAMIC_DRAWTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3lineWidthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3drawArraysTb4b4b4(Te6edf3glTb4b4b4.Te6edf3LINESTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3edgeVertexCountTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nodeCount Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3glTb4b4b4.Te6edf3useProgramTb4b4b4(Te6edf3nodeProgTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform2fTb4b4b4(Te6edf3uNodeResTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3widthTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform2fTb4b4b4(Te6edf3uNodeCamTb4b4b4, Te6edf3camXTb4b4b4, Te6edf3camYTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform1fTb4b4b4(Te6edf3uNodeZoomTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform1iTb4b4b4(Te6edf3uNodeAtlasTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3uniform2fTb4b4b4(Te6edf3uNodeCellUvTb4b4b4, Te6edf3atlasTb4b4b4.Te6edf3cellUvTb4b4b4.Te6edf3xTb4b4b4, Te6edf3atlasTb4b4b4.Te6edf3cellUvTb4b4b4.Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3activeTextureTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE0Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindTextureTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TEXTURE_2DTb4b4b4, Te6edf3atlasTb4b4b4.Te6edf3textureTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Te6edf3nodeVaoTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindBufferTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3nodeInstanceBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bufferDataTb4b4b4(Te6edf3glTb4b4b4.Te6edf3ARRAY_BUFFERTb4b4b4, Te6edf3nodesTb4b4b4, Te6edf3glTb4b4b4.Te6edf3DYNAMIC_DRAWTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3drawArraysInstancedTb4b4b4(Te6edf3glTb4b4b4.Te6edf3TRIANGLESTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff6Tb4b4b4, Te6edf3nodeCountTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3bindVertexArrayTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3labelCtx Tff7b72&& Te6edf3labelCanvasTb4b4b4) Tb4b4b4{
Te6edf3labelCtxTb4b4b4.Te6edf3setTransformTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3clearRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3labelCanvasTb4b4b4.Te6edf3widthTb4b4b4, Te6edf3labelCanvasTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4;
T8b949e// LOD (when labels appear) is decided by the engine via collectWebGLLabels.
Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3labelsTb4b4b4) Tff7b72&& Te6edf3labelsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3labelCtxTb4b4b4.Te6edf3textAlign Tff7b72= Ta5d6ff"center"Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3textBaseline Tff7b72= Ta5d6ff"top"Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3fill Tff7b72= Te6edf3dark Tff7b72? Ta5d6ff"#f4f4f5" Tff7b72: Ta5d6ff"#18181b"Tb4b4b4;
Tff7b72const Te6edf3stroke Tff7b72= Te6edf3dark Tff7b72? Ta5d6ff"rgba(9,9,11,0.75)" Tff7b72: Ta5d6ff"rgba(255,255,255,0.88)"Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3lineJoin Tff7b72= Ta5d6ff"round"Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3miterLimit Tff7b72= T79c0ff2Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3lineWidth Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff2Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(T79c0ff2.25 Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3lastFontKey Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3lab Tff7b72of Te6edf3labelsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3labTff7b72?Tb4b4b4.Te6edf3textTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3sx Tff7b72= Tb4b4b4(Te6edf3labTb4b4b4.Te6edf3x Tff7b72- Te6edf3camXTb4b4b4) Tff7b72* Te6edf3zoom Tff7b72+ Te6edf3cssW Tff7b72* T79c0ff0.5Tb4b4b4;
Tff7b72const Te6edf3sy Tff7b72= Tb4b4b4(Te6edf3labTb4b4b4.Te6edf3y Tff7b72- Te6edf3camYTb4b4b4) Tff7b72* Te6edf3zoom Tff7b72+ Te6edf3cssH Tff7b72* T79c0ff0.5Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3sx Tff7b72< Tff7b72-T79c0ff40 Tff7b72|| Te6edf3sy Tff7b72< Tff7b72-T79c0ff20 Tff7b72|| Te6edf3sx Tff7b72> Te6edf3cssW Tff7b72+ T79c0ff40 Tff7b72|| Te6edf3sy Tff7b72> Te6edf3cssH Tff7b72+ T79c0ff20Tb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3labTb4b4b4.Te6edf3size Tff7b72|| T79c0ff10Tb4b4b4, T79c0ff6Tb4b4b4) Tff7b72* Te6edf3zoomTb4b4b4;
T8b949e// Snap to device pixels to avoid blurry half-pixel text.
Tff7b72const Te6edf3tx Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3sx Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ty Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tb4b4b4(Te6edf3sy Tff7b72+ Te6edf3r Tff7b72+ T79c0ff4Tb4b4b4) Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3cssFont Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff11Tb4b4b4, Tffa657NumberTb4b4b4(Te6edf3labTb4b4b4.Te6edf3fontSizeTb4b4b4) Tff7b72|| T79c0ff11Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3fontPx Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff11Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3cssFont Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3fontKey Tff7b72= Tffa657StringTb4b4b4(Te6edf3fontPxTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3fontKey Tff7b72!== Te6edf3lastFontKeyTb4b4b4) Tb4b4b4{
Te6edf3labelCtxTb4b4b4.Te6edf3font Tff7b72= Ta5d6ff`Ta5d6ff500 Tffd700${Te6edf3fontPxTffd700}Ta5d6ffpx Inter, system-ui, -apple-system, "Segoe UI", sans-serifTa5d6ff`Tb4b4b4;
Te6edf3lastFontKey Tff7b72= Te6edf3fontKeyTb4b4b4;
Tb4b4b4}
Te6edf3labelCtxTb4b4b4.Te6edf3strokeStyle Tff7b72= Te6edf3strokeTb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3fillStyle Tff7b72= Te6edf3fillTb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3strokeTextTb4b4b4(Te6edf3labTb4b4b4.Te6edf3textTb4b4b4, Te6edf3txTb4b4b4, Te6edf3tyTb4b4b4)Tb4b4b4;
Te6edf3labelCtxTb4b4b4.Te6edf3fillTextTb4b4b4(Te6edf3labTb4b4b4.Te6edf3textTb4b4b4, Te6edf3txTb4b4b4, Te6edf3tyTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3sizeTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3destroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3atlasTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteBufferTb4b4b4(Te6edf3nodeCornerBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteBufferTb4b4b4(Te6edf3nodeInstanceBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteBufferTb4b4b4(Te6edf3edgeBufTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteVertexArrayTb4b4b4(Te6edf3nodeVaoTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteVertexArrayTb4b4b4(Te6edf3edgeVaoTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteProgramTb4b4b4(Te6edf3nodeProgTb4b4b4)Tb4b4b4;
Te6edf3glTb4b4b4.Te6edf3deleteProgramTb4b4b4(Te6edf3edgeProgTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3labelCanvasTff7b72?Tb4b4b4.Te6edf3parentElementTb4b4b4) Tb4b4b4{
Te6edf3labelCanvasTb4b4b4.Te6edf3parentElementTb4b4b4.Te6edf3removeChildTb4b4b4(Te6edf3labelCanvasTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3labelCanvas Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3labelCtx Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3drawTb4b4b4,
Te6edf3resizeTb4b4b4,
Te6edf3destroyTb4b4b4,
Te6edf3ensureIconTff7b72: Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Te6edf3atlasTb4b4b4.Te6edf3ensureTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4,
Te6edf3iconUvTff7b72: Tb4b4b4(Te6edf3slotTb4b4b4) Tb4b4b4=> Te6edf3atlasTb4b4b4.Te6edf3uvForSlotTb4b4b4(Te6edf3slotTb4b4b4)Tb4b4b4,
Te6edf3getIconSlotTff7b72: Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Te6edf3atlasTb4b4b4.Te6edf3getSlotTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4,
Te6edf3getCssSizeTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3widthTff7b72: Te6edf3cssWTb4b4b4, Te6edf3heightTff7b72: Te6edf3cssH Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72export Tb4b4b4{ Te6edf3ATLAS_CELLTb4b4b4, Te6edf3ATLAS_COLSTb4b4b4, Te6edf3ATLAS_ROWS Tb4b4b4}Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────